Hi all, 來到第24天把,由於我們目前在 redis 上的使用都是直接 DI 一個名為 IConnectionMultiplexer
的物件,再透過 IDataBase
的物件接起來做 Redis 的使用,但其實我們的使用端不應該知道這麼細節的操作,因此才會有想把這些封裝成SDK的想法。
既然有想法那就來把 Redis 封裝成 SDK來使用吧!
這邊主要會有兩隻 method:
GetOrCreate
: 拿值,如果不存在的 key就會執行第二個參數 func
在幫其加入 redis 做 cache。Update
: 單純更新 Redis內部的值,如果值不存在就 early return 。public class RedisManager(IConnectionMultiplexer connectionMultiplexer)
{
private readonly IDatabase _db = connectionMultiplexer.GetDatabase();
public T GetOrCreate<T>(string key, Func<T> func)
{
var cachedValue = _db.StringGet(key);
if (cachedValue.IsNullOrEmpty)
{
var value = func.Invoke();
_db.StringSet(key, JsonSerializer.Serialize(value));
return value;
}
return JsonSerializer.Deserialize<T>(cachedValue!)!;
}
public void Update<T>(string key, T value)
{
var originValue = _db.StringGet(key);
if (originValue.IsNullOrEmpty)
{
return ;
}
_db.StringSet(key, JsonSerializer.Serialize(value));
}
}
這邊主要會幫使用端註冊 必要的DI
public static class RedisRegistration
{
public static void UseResisSdk(this IServiceCollection services)
{
var redis = Environment.GetEnvironmentVariables()["REDIS_SERVER"]!.ToString()!;
services.AddSingleton<IConnectionMultiplexer>(
ConnectionMultiplexer.Connect(
new ConfigurationOptions
{
EndPoints = { { redis, 6379 } }
}
)
);
}
}
目前專案到這邊應該就可以了,接著可以動點指令來打包SDK,指令如下:
dotnet pack .\RedisSDK\RedisSDK.csproj -c Release -o ./packout
接著在資料夾中就會出現 packout 的資料夾,裏頭有個此次SDK的 nupkg檔案,直接把這個檔案直接上傳至 nuget官網即可。
今天我們把 Redis 互動的部分封裝成 SDK,並上傳至 Nuget Server。 接著只需要在專案內部透過 Nuget 下載 SDK來做使用即可,明天就來 apply Redis SDK 吧!
結語: 藍色星期一